#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 无参数的自定义信号和槽
    connect(this, &Widget::mySignal, this, &Widget::handleMySignal);

    // 发送出自定义的信号,可以在任意位置,不是必须在构造函数
    // emit mySignal();

    // 带单个参数的自定义信号和槽
    connect(this, &Widget::mySignal_2, this, &Widget::handleMySignal_2);
    // 带多个参数的自定义信号和槽
    connect(this, &Widget::mySignal_3, this, &Widget::handleMySignal_3);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::handleMySignal()
{
    this->setWindowTitle("处理自定义信号");
}

void Widget::handleMySignal_2(const QString & text)
{
    this->setWindowTitle(text);
}

void Widget::handleMySignal_3(const QString & text/*, const QString &text2*/)
{
    this->setWindowTitle(text);
}

void Widget::on_pushButton_clicked()
{
    // 在点击按钮时,发送自定义信号
    // emit mySignal();
    // QT5之后就可以省略emit了,但是建议写上更清晰明了
    // mySignal();

    emit mySignal_2("无参数的信号1"); // 带参数的自定义信号触发
}

void Widget::on_pushButton_2_clicked()
{
    emit mySignal_2("带单个参数的信号2");
}

void Widget::on_pushButton_3_clicked()
{
    emit mySignal_3("带多个参数的信号3", "");
}

